<?php
/**
 * User: zhengze
 * Date: 2019/7/2
 * Time: 17:45
 */

namespace app\common\helper;

use app\common\traits\InstanceTrait;
use Helper\ArrayHelper;
use think\facade\Request;

/**
 * Class FunctionHelper
 * @package common
 */
class FunctionHelper
{
    use InstanceTrait;

    /**
     * return !empty($value) ? $value : $default;
     * @param $value
     * @param $default
     * @return mixed
     */
    public static function empty_default($value, $default)
    {
        return !empty($value) ? $value : $default;
    }

    /**
     * 判断一个字符串在不在混合类型(数组,字符串)内
     * 字符串可以和str完全匹配
     * $str匹配或者真等于ture返回ture
     * @param $mixed string|array|object
     * @param bool
     */
    public static function checkMixedExist($mixed, $str)
    {
        if ($str === TRUE) {
            return TRUE;
        }
        if (is_string($mixed)) {
            if (mb_strpos($mixed, ',') !== FALSE) {
                return TRUE;
            }
        }
        //数组
        if (ArrayHelper::accessible($mixed) && in_array($str, $mixed)) {
            return TRUE;
        }
        //数组
        if (is_object($mixed) && isset($mixed->$str)) {
            return true;
        }

        return false;
    }

    /**
     * 按照规则(默认值,部分提取)返回request数组
     * @param Array $rule 数组
     * <br>['field'=>'default_value']
     * @param string $request_method 获取方式 get,post,param(默认)
     * @return boole
     */
    public static function input_extract_rule($rule, $request_method = '')
    {
        $ret = [];
        $input = input($request_method . '.');
        foreach ($rule as $key => $value) {
            if (!is_numeric($key) && isset($input[$key])) {
                $ret[$key] = $input[$key];
            } else {
                $ret[$key] = $value;
            }
        }
        return $ret;
    }

    /**
     * 获取当前请求的参数
     * @access public
     * @param string|array $name 变量名
     * @param mixed $default 默认值
     * @param string|array $filter 过滤方法
     * @return mixed
     */
    public static function input_param($name = '', $default = null, $filter = '')
    {
        if (ArrayHelper::isAssocArray($name)) {
            foreach ($name as $key => $value) {
                $ret[$key] = Request::param($key, $value, $filter);
            }
            return $ret;
        } else {
            return Request::param($name, $default, $filter);
        }
    }


    /**
     *  生成带该页面get的链接
     * @param string $str 控制器/方法
     * @param type 需要设置的get参数
     * @return url 生成的链接
     */
    public static function merge_url($str, $arr = [], $method = "get.")
    {
        return url($str, array_merge(input($method), $arr));
    }
}
